package hadoop;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;

/**
 * @Author:xuyuanhong
 * @Date:Created in 2022/3/7 15:35
 */
public class HadoopUtil {
    String url ="hdfs://192.168.10.129:9000/";
    //  上传
    public  String hadoopUpload(String srcPath ,String destPath) throws IOException{
        String url_new = url;
        Configuration conf = new Configuration();
        FileSystem fileSystem = FileSystem.get(URI.create(url_new),conf);

        //案例3： 上传本地文件到hdfs

        // 本地的 文件
        Path srcLoc =new Path(srcPath);
        // hdfs 的路径
        Path destLoc = new Path(destPath);
        // 使用 hadoop 的 copyFromLocalFile
        fileSystem.copyFromLocalFile(srcLoc,destLoc);

        return "上传成功";
    }
    //读文件
    public String hadoopRead(String filePath)throws IOException {

        String reaUrl = "hdfs://192.168.10.129:9000/"+ filePath;
        // 加载hdfs 的配置
        Configuration conf = new Configuration();
        // 建立hdfs连接
        FileSystem fileSystem = FileSystem.get(URI.create(reaUrl),conf);  //URI.create(reaUrl),conf)
        // 打开url路径的文件
        FSDataInputStream fsDataInputStream = fileSystem.open(new Path(reaUrl));
        // 输出 文件内容，并关闭输入流
        IOUtils.copyBytes(fsDataInputStream, System.out,4096,false);
        //System.out.println(fsDataInputStream);
        // s
        BufferedReader br = new BufferedReader(new InputStreamReader(fsDataInputStream, "utf-8"));


        String line = null;
        while((line=br.readLine()) != null) {


            System.out.println("数据内容 ");
            System.out.println(line);
        }
//        return "读取成功";
        return br.readLine();
    }
    // 下载
    public String hadoopDownload(String srcPath ,String destPath)throws IOException {
        // 用api的形式 读取下我们刚才写的文件
        String url_new = url;
        Configuration conf = new Configuration();
        FileSystem fileSystem = FileSystem.get(URI.create(url_new),conf);
        // 建立hdfs连接
        // 本地的 文件
        Path srcLoc =new Path(srcPath);
        // hdfs 的路径
        Path destLoc = new Path(destPath);
        fileSystem.copyToLocalFile(srcLoc,destLoc);
        return "下载成功";
    }


}




